package com.atmilan.quartz.model.dto.tmall;

import java.math.BigDecimal;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;

import lombok.Data;

/**
 * 天猫订单接收对象
 * @Description: 
 * @author daigb
 * @date 2021-03-23
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class TmallOrderDTO {
    /**
     * 错误代码
     */
    private Integer code;

    /**
     * 错误内容
     */
    private String message;

    /**
     * 返回结果
     */
    @JsonProperty(value = "data")
    private Result result;

    /**
     * 返回结果
     * @Description: 
     * @author daigb
     * @date 2021-03-23
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Result {
        /**
         * 总条数
         */
        @JsonProperty(value = "total")
        private Long total;
        
        /**
         * 订单详情
         */
        @JsonProperty(value = "record")
        private List<Record> records;
        
    }

    /**
     * 订单详情
     * @Description: 
     * @author daigb
     * @date 2021-03-23
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Record {
        /**
         * 订单id(唯一)
         */
        @JsonProperty(value = "orderId")
        private String orderId;
        
        /**
         * 订单发布时间
         */
        @JsonProperty(value = "orderTime")
        private Long orderTime;
        
        /**
         * 订单在系统的内部代码(TM, JD)
         */
        @JsonProperty(value = "platformId")
        private String platformId;
        
        /**
         * 订单所在的市场
         */
        @JsonProperty(value = "cartId")
        private String cartId;
        
        /**
         * 下订单的市场的真实订单号
         */
        @JsonProperty(value = "cartOrderId")
        private String cartOrderId;
        
        /**
         * 订单状态
         * Open 打开
         * Acknowledged  已确认
         * Cancel 取消请求
         * Partial 部分发货
         * Shipped 已出货
         * Canceled 已取消
         * Complete 已完成
         */
        @JsonProperty(value = "orderStatus")
        private String orderStatus;
        
        /**
         * 货币类型
         */
        @JsonProperty(value = "platformCurrency")
        private String platformCurrency;
        
        /**
         * 支付总额
         */
        @JsonProperty(value = "platformAmount")
        private BigDecimal platformAmount;
        
        /**
         * 折扣价
         */
        @JsonProperty(value = "platformDiscount")
        private BigDecimal platformDiscount;
        
        /**
         * 税款总额
         */
        @JsonProperty(value = "platformTax")
        private BigDecimal platformTax;
        
        /**
         * 运费
         */
        @JsonProperty(value = "platformShippingFee")
        private BigDecimal platformShippingFee;
        
        /**
         * 未解释
         */
        @JsonProperty(value = "platformRefundAmount")
        private BigDecimal platformRefundAmount;
        
        /**
         * 汇率
         */
        @JsonProperty(value = "exchangeRate")
        private BigDecimal exchangeRate;
        
        /**
         * 订单的货币和项目金额，折扣，运费和税收属性表示
         */
        @JsonProperty(value = "currency")
        private String currency;
        
        /**
         * 总金额(税+运费)
         */
        @JsonProperty(value = "amount")
        private BigDecimal amount;
        
        /**
         * 折扣金额
         */
        @JsonProperty(value = "discount")
        private BigDecimal discount;
        
        /**
         * 税款总额
         */
        @JsonProperty(value = "tax")
        private BigDecimal tax;
        
        /**
         * 运费总额
         */
        @JsonProperty(value = "shippingFee")
        private BigDecimal shippingFee;
        
        /**
         * 商品对象
         */
        @JsonProperty(value = "items")
        private List<Item> items;
        
        /**
         * 账单地址
         */
        @JsonProperty(value = "shipToBillInfo")
        private ShipToBillInfo shipToBillInfo;
        
        /**
         * 送货地址
         */
        @JsonProperty(value = "shipToInfo")
        private ShipToInfo shipToInfo;

    }

    /**
     * 订单商品对象
     * @Description: 
     * @author daigb
     * @date 2021-03-23
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class Item {
        /**
         * sku
         */
        @JsonProperty(value = "sku")
        private String sku;
        
        /**
         * 未解释
         */
        @JsonProperty(value = "code")
        private String code;
        
        /**
         * 未解释
         */
        @JsonProperty(value = "model")
        private String model;
        
        /**
         * 商品名称
         */
        @JsonProperty(value = "title")
        private String title;
        
        /**
         * 销售价
         */
        @JsonProperty(value = "cost")
        private BigDecimal cost;
        
        /**
         * 换算货币后的销售价
         */
        @JsonProperty(value = "platformUnitPrice")
        private BigDecimal platformUnitPrice;
        
        /**
         * 购买数量
         */
        @JsonProperty(value = "qty")
        private Integer qty;
        
        /**
         * 换算货币后支付总金额
         */
        @JsonProperty(value = "platformAmount")
        private BigDecimal platformAmount;
        
        /**
         * 税款总金额
         */
        @JsonProperty(value = "platformTax")
        private BigDecimal platformTax;
        
        /**
         * 商品折扣
         */
        @JsonProperty(value = "platformDiscount")
        private BigDecimal platformDiscount;
        
        /**
         * 运费
         */
        @JsonProperty(value = "platformShippingFee")
        private BigDecimal platformShippingFee;
        
        /**
         * 支付总金额
         */
        @JsonProperty(value = "amount")
        private BigDecimal amount;
        
        /**
         * 支付税款金额
         */
        @JsonProperty(value = "tax")
        private BigDecimal tax;
        
        /**
         * 支付折扣金额
         */
        @JsonProperty(value = "discount")
        private BigDecimal discount;
        
        /**
         * 支付运费金额
         */
        @JsonProperty(value = "shippingFee")
        private BigDecimal shippingFee;
        
        /**
         * 商品购买价格
         */
        @JsonProperty(value = "unitPrice")
        private BigDecimal unitPrice;
        
    }

    /**
     * 账单地址
     * @Description: 
     * @author daigb
     * @date 2021-03-23
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class ShipToBillInfo {
        /**
         * 与此地址相关联的人的第一个名字
         */
        @JsonProperty(value = "firstName")
        private String firstName;
        
        /**
         * 与此地址相关联的人的姓氏
         */
        @JsonProperty(value = "lastName")
        private String lastName;
        
        /**
         * 人名后缀
         */
        @JsonProperty(value = "nameSuffix")
        private String nameSuffix;
        
        /**
         * 电子邮件
         */
        @JsonProperty(value = "emailAddress")
        private String emailAddress;
        
        /**
         * 白天的电话号码
         */
        @JsonProperty(value = "daytimePhone")
        private String daytimePhone;
        
        /**
         * 晚上的电话号码
         */
        @JsonProperty(value = "eveningPhone")
        private String eveningPhone;
        
        /**
         * 公司名称地址
         */
        @JsonProperty(value = "companyName")
        private String companyName;
        
        /**
         * 国家代码
         */
        @JsonProperty(value = "country")
        private String country;
        
        /**
         * 州/省代码地址
         */
        @JsonProperty(value = "stateOrProvince")
        private String stateOrProvince;
        
        /**
         * 所在城市
         */
        @JsonProperty(value = "city")
        private String city;
        
        /**
         * 地址的第一行
         */
        @JsonProperty(value = "addressLine1")
        private String addressLine1;
        
        /**
         * 地址的第二行
         */
        @JsonProperty(value = "addressLine2")
        private String addressLine2;
        
        /**
         * 邮政编码
         */
        @JsonProperty(value = "postalCode")
        private String postalCode;
        
    }
    
    /**
     * 送货地址
     * @Description: 
     * @author daigb
     * @date 2021-03-23
     */
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class ShipToInfo {
        /**
         * 与此地址相关联的人的第一个名字
         */
        @JsonProperty(value = "firstName")
        private String firstName;
        
        /**
         * 与此地址相关联的人的姓氏
         */
        @JsonProperty(value = "lastName")
        private String lastName;
        
        /**
         * 人名后缀
         */
        @JsonProperty(value = "nameSuffix")
        private String nameSuffix;
        
        /**
         * 电子邮件
         */
        @JsonProperty(value = "emailAddress")
        private String emailAddress;
        
        /**
         * 白天的电话号码
         */
        @JsonProperty(value = "daytimePhone")
        private String daytimePhone;
        
        /**
         * 晚上的电话号码
         */
        @JsonProperty(value = "eveningPhone")
        private String eveningPhone;
        
        /**
         * 公司名称地址
         */
        @JsonProperty(value = "companyName")
        private String companyName;
        
        /**
         * 国家代码
         */
        @JsonProperty(value = "country")
        private String country;
        
        /**
         * 州/省代码地址
         */
        @JsonProperty(value = "stateOrProvince")
        private String stateOrProvince;
        
        /**
         * 所在城市
         */
        @JsonProperty(value = "city")
        private String city;
        
        /**
         * 地址的第一行
         */
        @JsonProperty(value = "addressLine1")
        private String addressLine1;
        
        /**
         * 地址的第二行
         */
        @JsonProperty(value = "addressLine2")
        private String addressLine2;
        
        /**
         * 邮政编码
         */
        @JsonProperty(value = "postalCode")
        private String postalCode;
        
        /**
         * 运输方式
         */
        @JsonProperty(value = "shippingMethod")
        private String shippingMethod;
        
        /**
         * 仓库
         */
        @JsonProperty(value = "wareHouse")
        private String wareHouse;
        
        /**
         * 
         */
        @JsonProperty(value = "carrierCode")
        private String carrierCode;
        
        /**
         * 订单号
         */
        @JsonProperty(value = "trackingNo")
        private String trackingNo;
        
        /**
         * 
         */
        @JsonProperty(value = "shipLabelType")
        private String shipLabelType;
        
        /**
         * 
         */
        @JsonProperty(value = "shipLabelValue")
        private String shipLabelValue;
        
    }

}
